package org.nanotek;

import java.io.Serializable;

/**
 * Document as a Vector, an Interface where the implementor shall describe a Document 
 * on a persistent mechanism as a vector that has it's coordinates based on a Key value 
 * store. 
 * 
 * Useful when it needs to describe a "document" which is not exactly the same as a "Lucene 
 * Document" as  a mechanism with a collection of other related "documents".
 * 
 * It is interesting notice that the methods "getId, setId" of the to Document are mutator of the 
 * ID of the Document (it's Base class) but does not mutate the "Document SubClass" by It Self. 
 * 
 * Not Yet Finished, just a prototype for test on future.
 * 
 * @see org.nanotek.Document
 * 
 * @author josecanova
 *
 * @param <B> Which Base Class describes the interface of the Document. 
 * @param <K>
 */

public interface DocumentBase <B extends Base<?>, K extends Serializable, D extends Document<D,B>> extends Document<D,B>{
 
	public B getDocumentBase(K key);
	
}
